﻿using System.Collections.Generic;

namespace Sex
{
	public partial class Sex : System.Web.UI.Page
	{
        public class FileTypeInfo
        {
            public static int CompareFileTypeInfo(FileTypeInfo x, FileTypeInfo y)
            {
                return x.Extension.CompareTo(y.Extension);
            }
            public string Extension;
            public string Icon;
            public string brush;
            public int MediaTemplateId;
            public FileGroup.Type Type;
            public FileTypeInfo(string Extension, string Icon, string brush, int MediaTemplateId, FileGroup.Type Type)
            {
                this.Extension = Extension;
                this.Icon = Icon;
                this.brush = brush;
                this.MediaTemplateId = MediaTemplateId;
                this.Type = Type;
            }
        }
        public static class FileTypes
        {
            public static bool IsSorted = false;
            public static string ExtensionToFind = "";

            public static void Sort()
            {
                if (!IsSorted)
                {
                    list.Sort(FileTypeInfo.CompareFileTypeInfo);
                    IsSorted = true;
                }
            }
            public static FileTypeInfo Get(string ext)
            {
                ExtensionToFind = ext;
                return list.Find(
                delegate(FileTypeInfo fti)
                {
                    return (ExtensionToFind == fti.Extension);
                });

            }
            public static bool IsImage(string Extension)
            {
                FileGroup.Type type = GetFileType(Extension.ToLower());
                switch (type)
                {
                    case FileGroup.Type.IMAGE:
                    case FileGroup.Type.EXIF:
                        return true;
                    default:
                        return false;
                }
            }
            public static FileGroup.Type GetFileType(string Extension)
            {
                Extension = Extension.ToLower();
                for (int i=0; i<list.Count; i++)
                {
                    if (list[i].Extension == Extension) return list[i].Type;
                }
                return FileGroup.Type.OTHER;
            }
            public static E_ObjectCommand GetFileTypeInThumb(string Extension)
            {
                Extension = Extension.ToLower();
                FileGroup.Type etf = FileGroup.Type.OTHER;
                for (int i = 0; i < list.Count; i++) 
                {
                    if (list[i].Extension == Extension)
                    {
                        etf = list[i].Type;
                        break;
                    }
                }
                return FileGroups.GetThumbCommand(etf);
            }
            // the following construct does not work with framework 2.0 when running in single file mode
            public static List<FileTypeInfo> list = new List<FileTypeInfo>() 
            {
                // exif
                new FileTypeInfo(".jpg", "paint.gif", "", 0, FileGroup.Type.EXIF),
                new FileTypeInfo(".jpeg", "paint.gif", "", 0, FileGroup.Type.EXIF),
                new FileTypeInfo(".jpe", "paint.gif", "", 0, FileGroup.Type.EXIF),
                new FileTypeInfo(".tif", "paint.gif", "", 0, FileGroup.Type.EXIF),
                new FileTypeInfo(".tiff", "paint.gif", "", 0, FileGroup.Type.EXIF),

                // image
                new FileTypeInfo(".bmp", "paint.gif", "", 0, FileGroup.Type.IMAGE),
                new FileTypeInfo(".gif", "paint.gif", "", 0, FileGroup.Type.IMAGE),
                new FileTypeInfo(".png", "paint.gif", "", 0, FileGroup.Type.IMAGE),

                // drwawing
                new FileTypeInfo(".svg", "css.gif", "xml", -1, FileGroup.Type.INLINE),

                // code executable
                new FileTypeInfo(".asp", "asp.gif", "vb", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".aspx", "aspx.gif", "xml", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".css", "css.gif", "css", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".htm", "seite.gif", "xml", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".html", "seite.gif", "xml", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".ini", "notepad.gif", "text", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".php", "php.gif", "php", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".php3", "php.gif", "php", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".scss", "css.gif", "css", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".shtm", "seite.gif", "xml", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".shtml", "seite.gif", "xml", -1, FileGroup.Type.CODEEXE),
                new FileTypeInfo(".txt", "notepad.gif", "text", -1, FileGroup.Type.CODEEXE),

                // code 
                new FileTypeInfo(".asa", "seiteA.gif", "", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".ascx", "ascx.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".bat", "vb\\ico4511.gif", "shell", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".c", "cs\\ico4516.gif", "c", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".config", "cs\\ico4545.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".cpp", "cs\\ico4516.gif", "cpp", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".cs", "cs\\ico4516.gif", "c-sharp", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".csproj", "cs\\ico4545.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".csv", "cs\\ico4545.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".js", "seite.gif", "js", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".log", "notepad.gif", "text", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".master", "notepad.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".sh", "vb\\ico4511.gif", "shell", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".user", "cs\\ico4545.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".vb", "vb\\ico4511.gif", "vb", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".vbs", "vb\\ico4511.gif", "vb", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".xls", "excel2.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".xml", "seitex.gif", "xml", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".xss", "seitexs.gif", "css", -1, FileGroup.Type.CODE),
                new FileTypeInfo(".sln", "seitexs.gif", "xml", -1, FileGroup.Type.CODE),

                // audio
                new FileTypeInfo(".mid", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".midi", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".mp3", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".ogg", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".mpga", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".wav", "mov.gif", "", 1, FileGroup.Type.AUDIO),
                new FileTypeInfo(".wma", "mov.gif", "", 1, FileGroup.Type.AUDIO),

                // video
                new FileTypeInfo(".avi", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".wmv", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".webm", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".mpg", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".mpeg", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".mov", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".swf", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".slv", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".mp4", "mov.gif", "", 15, FileGroup.Type.VIDEO),
                new FileTypeInfo(".flv", "mov.gif", "", 15, FileGroup.Type.VIDEO),

                // audio+video
                new FileTypeInfo(".rm", "mov.gif", "", 8, FileGroup.Type.AUDVID),
                new FileTypeInfo(".ram", "mov.gif", "", 8, FileGroup.Type.AUDVID),

                // application
                new FileTypeInfo(".pdf", "pdf.gif", "", -1, FileGroup.Type.APPLIEXE),

                // application
                new FileTypeInfo(".pps", "powerpoint2.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".ppt", "powerpoint2.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".doc", "winword2.gif", "", -1, FileGroup.Type.OTHER),

                // binary
                new FileTypeInfo(".dll", "fenster.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".exe", "fenster.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".jar", "zip.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".mdb", "key.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".tar", "zip.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".ttf", "truetype.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".zip", "zip.gif", "", -1, FileGroup.Type.OTHER),

                // special
                new FileTypeInfo(".cfg", "text.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".ebook", "buch.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".ebooks", "buecher1.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".images", "bild.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".pictures", "bild.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".programm", "diskette2.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".sources", "dienste.gif", "", -1, FileGroup.Type.OTHER),
                new FileTypeInfo(".link", "globusli.gif", "", -1, FileGroup.Type.OTHER)
            };
        }
    }
}